名前付き要件
[named_requirements]
ここでは、oneTBB 仕様で使用される名前付き要件について説明します。
名前付き要件は、タイプの要件のセットです。要件は、構文または意味を成します。名前付き要件 (named_requirement) の用語は、cppreference.com サイトにある ISO C++ 標準 (“ライブラリーの概要”) または “名前付き要件” で定義される “タイプと式の要件”の用語と類似しています。
例えば、ソート可能の名前付き要件は、配列のソートを可能にする要件のセットとして定義されます。T
タイプは、次の場合にソート可能です。
x < y
がブール値を返し、T
タイプの項目のすべての順序を表します。swap(x,y)
はx
とy
の項目を入れ替えます。
C++ でソート・テンプレート関数を記述して、ソート可能な任意のタイプの配列がソートできることを保証できます。
名前付き要件を定義する 2 つのアプローチは、有効式 と擬似署名 です。ISO C++ 標準は、使用方法のパターンを示す有効式 のアプローチに従います。しかしこれには、重要な詳細を表記規則に押し付けてしまう欠点があります。このドキュメントでは、簡潔で、最初の実装にカットアンドペーストできるため、擬似署名を使用しています。
下記の表は、ソート可能な T
タイプの擬似署名を示しています:
ソート可能要件: 擬似署名、セマンティクス
- bool operator<(const T &x, const T &y)
x と y を比較します。
- void swap(T &x, T &y)
x と y を入れ替えます。
実署名は、C++ で許可された暗黙的タイプ変換による擬似署名とは異なります。タイプ U
の場合、表の operator<
を実装する実際のシグネチャーは、int operator<( U x, U y )
として表わすことができますが、これは C++ では int
から bool
への暗黙の変換と、U
から (const U&
) への暗黙の変換が許容されるためです。同様に、C++ では参照タイプへの const 修飾子の暗黙的な追加を許可しているため、実署名 bool operator<( U& x, U& y )
は許容されます。